﻿/**
 * 改变编辑器大小的插件
 */
(function(E){
var Consts = E.consts, Event = E.mod('Event');

E.plugin("Resize", {
	autoHeight: function(){
		var option = E.get('option');
		if( option.autoHeight ){
			autoHeight( option );
		}
	},
	
	setHeight: function( height, speed ){
		var Content = $('#'+E.eid).find('div.jqe-content');
		speed = (typeof speed === 'number') ? speed : 1;
		
		//IE6需要同时给iframe设置高度，IE6下iframe height=100% 貌似不好使
		if( Consts.IE6 ){
			Content.height( height );
			Content.children('iframe').height(height);
		}else{
			// 2011-07-24 潘雪鹏
			// Firefox 下animate会导致点击工具栏按钮时，内容区域光标丢失焦点
			// 还是不使用animate动画效果了
			//speed < 100 ? Content.height( height )
			//	: Content.animate({height: height}, speed);
			
			Content.height( height )
			return false;
		}
		
		E.log('run', 'autoHeight = '+ height+', speed='+speed);
		
		// 已知问题：
		// 在sogou浏览器兼容模式下，持续按下回车键，松开后不能正确设置iframe的高度值
		// IE下、sogou高速模式均正常
	}
});

Event.bind("oncreate", function( e ){
	var option = E.get('option');
	if( option.autoHeight ){
		/*
		// 2011-06-15 潘雪鹏
		// 如果一个页面有多个编辑器，setTimtout会导致option永远是最后那个编辑器的option
		setTimeout(function(){
			autoHeight( option );
		}, 500);
		
		// 使用匿名函数解决
		*/
		setTimeout((function(option){
			return function(){
				autoHeight( option );
			}
			
			// 定时器的值不宜小于150，否则在ie下可能不能正常工作
		})(option), 250);
		
		// 防止第一次高度调整失败，再次进行高度调整
		setTimeout((function(option){
			return function(){
				autoHeight( option );
			}
		})(option), 500);
	}
});


Event.bind('load', function(dom, e){
	var option = E.get('option');
	if( option.autoHeight ){
		autoHeight( option );
	}
});

Event.bind("onmonitor", function( e ){
	var option = E.get('option');
	if( option.autoHeight ){
		autoHeight( option );
	}
});

// 根据内容自动调整编辑器的高度
function autoHeight( option ){
	// 为了使下面的E.get()获取到正确的值，首先setEid
	E.setEid(option.id);
	
	var dom = E.get('document'),
		iframe = E.get('iframe'),
		Resize = E.plugin("Resize"),
		H = 0,
		tmpDiv = dom.createElement("DIV");
	
    tmpDiv.style.clear = "both";
    tmpDiv.style.display = "block";
    dom.body.appendChild(tmpDiv);
	
    H = Math.max(tmpDiv.offsetTop + 20, option.height);
	dom.body.removeChild(tmpDiv);
	
	Resize.setHeight( H, option.autoHeight || 100 );
}

})(jQEditor);